from copy import deepcopy

"""
    ！！！注意，以下权限代码会自动更新数据库，与其保持一致
    分隔符为,（英文逗号）。内容只容许中英文数字及下划线。如果不符规范，项目无法启动。
    content 和 vname为全称，会包含模块分隔符，为.(英文.)
    Enterprise.base,view,查看公司基本信息,公司.基本信息.查看,查看公司基本情况(后端使用)
    意为:
    有company.base的view权限，能查看公司基本信息，
    在权限页面中，这个权限在 公司模块、基本信息内
    对它的说明是：查看公司基本情况 这个字段允许使用括号加备注

"""
PERMISSIONS = """
enterprise.base,view,enterprise,查看公司基本信息,公司.基本信息.查看,查看公司基本情况
enterprise.base,add,enterprise,新增公司,公司.基本信息.新增,增加一家公司_wow项目仅天善一家公司_不需要此权限
enterprise.base,edit,enterprise,编辑公司,公司.基本信息.编辑,编辑一家公司
enterprise.base,delete,enterprise,删除公司,公司.基本信息.删除,删除一家公司
user.base,view,user,查看用户账号信息,用户.账号.查看,查看某用户详细信息
user.base,add,user,新增微信关注者用户账号,用户.账号.新增,新增公众号关注者账号
user.base,edit,user,查看用户账号信息,用户.账号.查看,查看某用户详细信息
user.base,delete,user
user.account,view,user,查看用户账号信息,用户.账号.查看,查看某用户详细信息
user.account,add,user,新增微信关注者用户账号,用户.账号.新增,新增公众号关注者账号
user.account,edit,user,查看用户账号信息,用户.账号.查看,查看某用户详细信息
user.account,delete,user
user.list,view,user
user.list,add,user
user.list,edit,user
user.list,delete,user
user.department,view,user
user.department,add,user
user.department,edit,user
user.department,delete,user
user.role,view,user
user.role,add,user
user.role,edit,user
user.role,delete,user
user.permission,view,user
user.permission,add,user
user.permission,edit,user
user.permission,delete,user
user.account_wechat,view,user
user.account_wechat,add,user
user.account_wechat,edit,user
user.account_wechat,delete,user
"""

MODULES_ALL = [
    "base",
    "enterprise",
    "user",
]


def sync_permissions():
    """
        同步代码中和数据库中的permission记录
    :return:
    """
    from app.user.models import Permission, Role
    _all_permissions = Permission.objects().all()
    all_permissions = {str(i.id): i for i in _all_permissions}

    for line in PERMISSIONS.split('\n'):
        line = line.strip()
        if not line or line.startswith("#"):
            continue
        permission = Permission.parse_line(line)
        _permission = Permission.objects(id=permission.content + "-" + permission.action).first()
        if _permission:
            if _permission.to_line() != line:
                print("修改权限:%s >> %s" % (_permission.to_line(), permission.to_line()))
                _permission.update_with(permission._data, ignore_fields=['id', 'creator_id', 'create_time'])
                if _permission.is_deleted:
                    _permission.is_deleted = None
                    _permission.delete_time = None
                _permission.save()
            elif _permission.is_deleted:
                _permission.is_deleted = None
                _permission.delete_time = None
                _permission.save()
            all_permissions.pop(_permission.id)
        else:
            print("新增权限:%s" % permission.to_line())
            permission.save()
    for _index, item in all_permissions.items():
        print("删除权限:%s" % item.to_line())
        item.set_deleted()
